<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>142. 环形链表 II</title>
  </head>
  <body>
    <script>
      //     给定一个链表的头节点  head ，返回链表开始入环的第一个节点。 如果链表无环，则返回 null。

      // 如果链表中有某个节点，可以通过连续跟踪 next 指针再次到达，则链表中存在环。 为了表示给定链表中的环，评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置（索引从 0 开始）。如果 pos 是 -1，则在该链表中没有环。注意：pos 不作为参数进行传递，仅仅是为了标识链表的实际情况。

      // 不允许修改 链表。

      //

      // 示例 1：

      // 输入：head = [3,2,0,-4], pos = 1
      // 输出：返回索引为 1 的链表节点
      // 解释：链表中有一个环，其尾部连接到第二个节点。
      // 示例 2：

      // 输入：head = [1,2], pos = 0
      // 输出：返回索引为 0 的链表节点
      // 解释：链表中有一个环，其尾部连接到第一个节点。
      // 示例 3：

      // 输入：head = [1], pos = -1
      // 输出：返回 null
      // 解释：链表中没有环。

      // 来源：力扣（LeetCode）
      // 链接：https://leetcode.cn/problems/linked-list-cycle-ii
      // 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
      /**
       * Definition for singly-linked list.
       * function ListNode(val) {
       *     this.val = val;
       *     this.next = null;
       * }
       */

      /**
       * @param {ListNode} head
       * @return {ListNode}
       */
      var detectCycle = function (head) {
        let arr = []
        while (head) {
          if (arr.indexOf(head) !== -1) {
            return head
          }
          arr.push(head)
          head = head.next
        }
        return null
      }
    </script>
  </body>
</html>
